--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/mapview/view.py bbefc39fd79001dddf5dc11c09a4fcf3b9b4948b (bbefc39f) Text, 37.02 KB
T8b949e# coding=utf-8
Te6edf3__all__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffMapViewTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMapMarkerTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMapMarkerPopupTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMapLayerTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMarkerMapLayerTa5d6ff"Tb4b4b4]
Tff7b72import T7ee787webbrowser
Tff7b72from T7ee787itertools Tff7b72import Te6edf3takewhile
Tff7b72from T7ee787math Tff7b72import Te6edf3ceil
Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3dirnameTb4b4b4, Te6edf3join
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787compat Tff7b72import Te6edf3string_types
Tff7b72from T7ee787kivyT7ee787.T7ee787graphics Tff7b72import Te6edf3CanvasTb4b4b4, Te6edf3ColorTb4b4b4, Te6edf3Rectangle
Tff7b72from T7ee787kivyT7ee787.T7ee787graphicsT7ee787.T7ee787transformation Tff7b72import Te6edf3Matrix
Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Tb4b4b4(
Te6edf3AliasPropertyTb4b4b4,
Te6edf3BooleanPropertyTb4b4b4,
Te6edf3ListPropertyTb4b4b4,
Te6edf3NumericPropertyTb4b4b4,
Te6edf3ObjectPropertyTb4b4b4,
Te6edf3StringPropertyTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787behaviors Tff7b72import Te6edf3ButtonBehavior
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787image Tff7b72import Te6edf3Image
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787label Tff7b72import Te6edf3Label
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787scatter Tff7b72import Te6edf3Scatter
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787widget Tff7b72import Te6edf3Widget
Tff7b72from T7ee787mapview Tff7b72import Te6edf3BboxTb4b4b4, Te6edf3Coordinate
Tff7b72from T7ee787mapviewT7ee787.T7ee787constants Tff7b72import Tb4b4b4(
Te6edf3CACHE_DIRTb4b4b4,
Te6edf3MAX_LATITUDETb4b4b4,
Te6edf3MAX_LONGITUDETb4b4b4,
Te6edf3MIN_LATITUDETb4b4b4,
Te6edf3MIN_LONGITUDETb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787mapviewT7ee787.T7ee787source Tff7b72import Te6edf3MapSource
Tff7b72from T7ee787mapviewT7ee787.T7ee787utils Tff7b72import Te6edf3clamp
Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(
T8b949e"""
MapMarker>:
size_hint: None, None
source: root.source
size: list(map(dp, self.texture_size))
allow_stretch: True
CustomMapMarker>:
size_hint: None, None
source: root.source
size: list(map(dp, self.texture_size))
allow_stretch: True
on_release: root.app.map_display_telemetry()
MapView>:
canvas.before:
StencilPush
Rectangle:
pos: self.pos
size: self.size
StencilUse
Color:
rgba: self.background_color
Rectangle:
pos: self.pos
size: self.size
canvas.after:
StencilUnUse
Rectangle:
pos: self.pos
size: self.size
StencilPop
ClickableLabel:
text: root.map_source.attribution if hasattr(root.map_source, "attribution") else ""
size_hint: None, None
size: self.texture_size[0] + sp(8), self.texture_size[1] + sp(4)
font_size: "10sp"
right: [root.right, self.center][0]
color: 0, 0, 0, 1
markup: True
canvas.before:
Color:
rgba: .8, .8, .8, .8
Rectangle:
pos: self.pos
size: self.size
MapViewScatter>:
auto_bring_to_front: False
do_rotation: False
scale_min: 0.2
scale_max: 3.
MapMarkerPopup>:
RelativeLayout:
id: placeholder
y: root.top
center_x: root.center_x
size: root.popup_size
"""
Tb4b4b4)
Tff7b72class T56d364ClickableLabelTb4b4b4(Te6edf3LabelTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffon_ref_pressTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Tffa657strTb4b4b4(Te6edf3argsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3newTff7b72=T79c0ff2Tb4b4b4)
Tff7b72class T56d364TileTb4b4b4(Te6edf3RectangleTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcache_dir Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffcache_dirTa5d6ff'Tb4b4b4, Te6edf3CACHE_DIRTb4b4b4)
Tf0883e@property
Tff7b72def Td2a8ffcache_fnTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3fn Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffcache_fmtTff7b72.Td2a8ffformatTb4b4b4(
Te6edf3image_extTff7b72=Te6edf3map_sourceTff7b72.Td2a8ffimage_extTb4b4b4,
Te6edf3cache_keyTff7b72=Te6edf3map_sourceTff7b72.Td2a8ffcache_keyTb4b4b4,
Tff7b72*Tff7b72*Tff7b72selfTff7b72.Td2a8ff__dict__
Tb4b4b4)
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffcache_dirTb4b4b4, Te6edf3fnTb4b4b4)
Tff7b72def Td2a8ffset_sourceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cache_fnTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3cache_fn
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tff7b72class T56d364CustomMapMarkerTb4b4b4(Te6edf3ButtonBehaviorTb4b4b4, Te6edf3ImageTb4b4b4)Tb4b4b4:
T8b949e"""A marker on a map, that must be used on a :class:`MapMarker`
"""
Te6edf3anchor_x Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0.5Tb4b4b4)
T8b949e"""Anchor of the marker on the X axis. Defaults to 0.5, mean the anchor will
be at the X center of the image.
"""
Te6edf3anchor_y Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Anchor of the marker on the Y axis. Defaults to 0, mean the anchor will
be at the Y bottom of the image.
"""
Te6edf3lat Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Latitude of the marker
"""
Te6edf3lon Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Longitude of the marker
"""
Te6edf3source Tff7b72= Te6edf3StringPropertyTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker.pngTa5d6ff"Tb4b4b4)Tb4b4b4)
T8b949e"""Source of the marker, defaults to our own marker.png
"""
Te6edf3icon_bg Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4)
T8b949e# (internal) reference to its layer
Te6edf3_layer Tff7b72= Tff7b72None
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6fficon_bgTa5d6ff" Tff7b72in Te6edf3kwargsTb4b4b4:
Te6edf3bg Tff7b72= Te6edf3kwargsTb4b4b4[Ta5d6ff"Ta5d6fficon_bgTa5d6ff"Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3bgTb4b4b4) Tff7b72>Tff7b72= T79c0ff3Tb4b4b4:
Te6edf3lim Tff7b72= T79c0ff0.5
Te6edf3lum Tff7b72= Tb4b4b4(Te6edf3bgTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72+Te6edf3bgTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72+Te6edf3bgTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)Tff7b72/T79c0ff3
Tff7b72if Te6edf3lum Tff7b72>Tff7b72= Te6edf3limTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker_dark.pngTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsource Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker_dark.pngTa5d6ff"Tb4b4b4)
Tffa657superTb4b4b4(Te6edf3CustomMapMarkerTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftexture_updateTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdetachTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_layerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_layerTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_layer Tff7b72= Tff7b72None
Tff7b72class T56d364MapMarkerTb4b4b4(Te6edf3ButtonBehaviorTb4b4b4, Te6edf3ImageTb4b4b4)Tb4b4b4:
T8b949e"""A marker on a map, that must be used on a :class:`MapMarker`
"""
Te6edf3anchor_x Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0.5Tb4b4b4)
T8b949e"""Anchor of the marker on the X axis. Defaults to 0.5, mean the anchor will
be at the X center of the image.
"""
Te6edf3anchor_y Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Anchor of the marker on the Y axis. Defaults to 0, mean the anchor will
be at the Y bottom of the image.
"""
Te6edf3lat Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Latitude of the marker
"""
Te6edf3lon Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Longitude of the marker
"""
Te6edf3source Tff7b72= Te6edf3StringPropertyTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fficonsTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffmarker.pngTa5d6ff"Tb4b4b4)Tb4b4b4)
T8b949e"""Source of the marker, defaults to our own marker.png
"""
T8b949e# (internal) reference to its layer
Te6edf3_layer Tff7b72= Tff7b72None
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Te6edf3MapMarkerTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftexture_updateTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdetachTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_layerTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_layerTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_layer Tff7b72= Tff7b72None
Tff7b72class T56d364MapMarkerPopupTb4b4b4(Te6edf3MapMarkerTb4b4b4)Tb4b4b4:
Te6edf3is_open Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3placeholder Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3popup_size Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff100Tb4b4b4, T79c0ff100Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffplaceholder Tff7b72= Te6edf3widget
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_openTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffplaceholderTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3widget Tff7b72is Tff7b72not Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffplaceholderTff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ffon_is_openTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrefresh_open_statusTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffon_releaseTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffis_open Tff7b72= Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_open
Tff7b72def Td2a8ffrefresh_open_statusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffis_open Tff7b72and Tff7b72selfTff7b72.Td2a8ffplaceholderTff7b72.Td2a8ffparentTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffis_open Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffplaceholderTff7b72.Td2a8ffparentTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffplaceholderTb4b4b4)
Tff7b72class T56d364MapLayerTb4b4b4(Te6edf3WidgetTb4b4b4)Tb4b4b4:
T8b949e"""A map layer, that is repositionned everytime the :class:`MapView` is
moved.
"""
Te6edf3viewport_x Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3viewport_y Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72def Td2a8ffrepositionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Function called when :class:`MapView` is moved. You must recalculate
the position of your children.
"""
Tff7b72pass
Tff7b72def Td2a8ffunloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Called when the view want to completly unload the layer.
"""
Tff7b72pass
Tff7b72class T56d364MarkerMapLayerTb4b4b4(Te6edf3MapLayerTb4b4b4)Tb4b4b4:
T8b949e"""A map layer for :class:`MapMarker`
"""
Te6edf3order_marker_by_latitude Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmarkers Tff7b72= Tb4b4b4[Tb4b4b4]
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ffinsert_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fforder_marker_by_latitudeTb4b4b4:
Te6edf3before Tff7b72= Tffa657listTb4b4b4(
Te6edf3takewhileTb4b4b4(Tff7b72lambda Te6edf3i_mTb4b4b4: Te6edf3i_mTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72.Td2a8fflat Tff7b72< Te6edf3markerTff7b72.Td2a8fflatTb4b4b4, Tffa657enumerateTb4b4b4(Tff7b72selfTff7b72.Td2a8ffchildrenTb4b4b4)Tb4b4b4)
Tb4b4b4)
Tff7b72if Te6edf3beforeTb4b4b4:
Te6edf3kwargsTb4b4b4[Ta5d6ff'Ta5d6ffindexTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3beforeTb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ T79c0ff1
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3markerTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Te6edf3markerTff7b72.Td2a8ff_layer Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffmarkersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinsert_markerTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72def Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Te6edf3markerTff7b72.Td2a8ff_layer Tff7b72= Tff7b72None
Tff7b72if Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffmarkersTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmarkersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3markerTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72def Td2a8ffrepositionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffmarkersTb4b4b4:
Tff7b72return
Te6edf3mapview Tff7b72= Tff7b72selfTff7b72.Td2a8ffparent
Te6edf3set_marker_position Tff7b72= Tff7b72selfTff7b72.Td2a8ffset_marker_position
Te6edf3bbox Tff7b72= Tff7b72None
T8b949e# reposition the markers depending the latitude
Te6edf3markers Tff7b72= Tffa657sortedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkersTb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3xTb4b4b4: Tff7b72-Te6edf3xTff7b72.Td2a8fflatTb4b4b4)
Te6edf3margin Tff7b72= Tffa657maxTb4b4b4(Tb4b4b4(Tffa657maxTb4b4b4(Te6edf3markerTff7b72.Td2a8ffsizeTb4b4b4) Tff7b72for Te6edf3marker Tff7b72in Te6edf3markersTb4b4b4)Tb4b4b4)
Te6edf3bbox Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_bboxTb4b4b4(Te6edf3marginTb4b4b4)
Tff7b72for Te6edf3marker Tff7b72in Te6edf3markersTb4b4b4:
Tff7b72if Te6edf3bboxTff7b72.Td2a8ffcollideTb4b4b4(Te6edf3markerTff7b72.Td2a8fflatTb4b4b4, Te6edf3markerTff7b72.Td2a8fflonTb4b4b4)Tb4b4b4:
Te6edf3set_marker_positionTb4b4b4(Te6edf3mapviewTb4b4b4, Te6edf3markerTb4b4b4)
Tff7b72if Tff7b72not Te6edf3markerTff7b72.Td2a8ffparentTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinsert_markerTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72def Td2a8ffset_marker_positionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mapviewTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
Te6edf3xTb4b4b4, Te6edf3y Tff7b72= Te6edf3mapviewTff7b72.Td2a8ffget_window_xy_fromTb4b4b4(Te6edf3markerTff7b72.Td2a8fflatTb4b4b4, Te6edf3markerTff7b72.Td2a8fflonTb4b4b4, Te6edf3mapviewTff7b72.Td2a8ffzoomTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffx Tff7b72= Tffa657intTb4b4b4(Te6edf3x Tff7b72- Te6edf3markerTff7b72.Td2a8ffwidth Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_xTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffy Tff7b72= Tffa657intTb4b4b4(Te6edf3y Tff7b72- Te6edf3markerTff7b72.Td2a8ffheight Tff7b72* Te6edf3markerTff7b72.Td2a8ffanchor_yTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3markerTb4b4b4, Ta5d6ff"Ta5d6ffchildrenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3markerTff7b72.Td2a8ffchildren Tff7b72!= Tff7b72None Tff7b72and Tffa657lenTb4b4b4(Te6edf3markerTff7b72.Td2a8ffchildrenTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72for Te6edf3c Tff7b72in Te6edf3markerTff7b72.Td2a8ffchildrenTb4b4b4:
Te6edf3cTff7b72.Td2a8ffx Tff7b72= Te6edf3markerTff7b72.Td2a8ffx
Te6edf3cTff7b72.Td2a8ffy Tff7b72= Te6edf3markerTff7b72.Td2a8ffyTff7b72+Te6edf3dpTb4b4b4(T79c0ff16Tb4b4b4)
Tff7b72def Td2a8ffunloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclear_widgetsTb4b4b4(Tb4b4b4)
Tff7b72del Tff7b72selfTff7b72.Td2a8ffmarkersTb4b4b4[Tb4b4b4:Tb4b4b4]
Tff7b72class T56d364MapViewScatterTb4b4b4(Te6edf3ScatterTb4b4b4)Tb4b4b4:
T8b949e# internal
Tff7b72def Td2a8ffon_transformTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffon_transformTb4b4b4(Tff7b72*Te6edf3argsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffparentTff7b72.Td2a8ffon_transformTb4b4b4(Tff7b72selfTff7b72.Td2a8fftransformTb4b4b4)
Tff7b72def Td2a8ffcollide_pointTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72class T56d364MapViewTb4b4b4(Te6edf3WidgetTb4b4b4)Tb4b4b4:
T8b949e"""MapView is the widget that control the map displaying, navigation, and
layers management.
"""
Te6edf3lon Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
T8b949e"""Longitude at the center of the widget
"""
Te6edf3lat Tff7b72= Te6edf3NumericPropertyTb4b4b4(Tb4b4b4)
T8b949e"""Latitude at the center of the widget
"""
Te6edf3zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e"""Zoom of the widget. Must be between :meth:`MapSource.get_min_zoom` and
:meth:`MapSource.get_max_zoom`. Default to 0.
"""
Te6edf3map_source Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Te6edf3MapSourceTb4b4b4(Tb4b4b4)Tb4b4b4)
T8b949e"""Provider of the map, default to a empty :class:`MapSource`.
"""
Te6edf3double_tap_zoom Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
T8b949e"""If True, this will activate the double-tap to zoom.
"""
Te6edf3pause_on_action Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e"""Pause any map loading / tiles loading when an action is done.
This allow better performance on mobile, but can be safely deactivated on
desktop.
"""
Te6edf3snap_to_zoom Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
T8b949e"""When the user initiate a zoom, it will snap to the closest zoom for
better graphics. The map can be blur if the map is scaled between 2 zoom.
Default to True, even if it doesn't fully working yet.
"""
Te6edf3animation_duration Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff100Tb4b4b4)
T8b949e"""Duration to animate Tiles alpha from 0 to 1 when it's ready to show.
Default to 100 as 100ms. Use 0 to deactivate.
"""
Te6edf3delta_x Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3delta_y Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3background_color Tff7b72= Te6edf3ListPropertyTb4b4b4(Tb4b4b4[T79c0ff181 Tff7b72/ T79c0ff255.0Tb4b4b4, T79c0ff208 Tff7b72/ T79c0ff255.0Tb4b4b4, T79c0ff208 Tff7b72/ T79c0ff255.0Tb4b4b4, T79c0ff1Tb4b4b4]Tb4b4b4)
Te6edf3cache_dir Tff7b72= Te6edf3StringPropertyTb4b4b4(Te6edf3CACHE_DIRTb4b4b4)
Te6edf3_zoom Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0Tb4b4b4)
Te6edf3_pause Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3_scale Tff7b72= T79c0ff1.0
Te6edf3_allow_snap Tff7b72= Tff7b72False
Te6edf3_disabled_count Tff7b72= T79c0ff0
Te6edf3high_res Tff7b72= Tff7b72True
Te6edf3high_res_mode Tff7b72= T79c0ff1
Te6edf3__events__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffon_map_relocatedTa5d6ff"Tb4b4b4]
T8b949e# Public API
Tf0883e@property
Tff7b72def Td2a8ffviewport_posTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3vxTb4b4b4, Te6edf3vy Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffto_localTb4b4b4(Tff7b72selfTff7b72.Td2a8ffxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffyTb4b4b4)
Tff7b72return Te6edf3vx Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_xTb4b4b4, Te6edf3vy Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_y
Tf0883e@property
Tff7b72def Td2a8ffscaleTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_invalid_scaleTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_invalid_scale Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_scale Tff7b72= Tffa657roundTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffscaleTb4b4b4, T79c0ff2Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_scale
Tff7b72def Td2a8ffget_bboxTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3marginTff7b72=T79c0ff0Tb4b4b4)Tb4b4b4:
T8b949e"""Returns the bounding box from the bottom/left (lat1, lon1) to
top/right (lat2, lon2).
"""
Te6edf3x1Tb4b4b4, Te6edf3y1 Tff7b72= Tff7b72selfTff7b72.Td2a8ffto_localTb4b4b4(T79c0ff0 Tff7b72- Te6edf3marginTb4b4b4, T79c0ff0 Tff7b72- Te6edf3marginTb4b4b4)
Te6edf3x2Tb4b4b4, Te6edf3y2 Tff7b72= Tff7b72selfTff7b72.Td2a8ffto_localTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72+ Te6edf3marginTb4b4b4)Tb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffheight Tff7b72+ Te6edf3marginTb4b4b4)Tb4b4b4)
Te6edf3c1 Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_latlon_atTb4b4b4(Te6edf3x1Tb4b4b4, Te6edf3y1Tb4b4b4)
Te6edf3c2 Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_latlon_atTb4b4b4(Te6edf3x2Tb4b4b4, Te6edf3y2Tb4b4b4)
Tff7b72return Te6edf3BboxTb4b4b4(Tb4b4b4(Te6edf3c1Tff7b72.Td2a8fflatTb4b4b4, Te6edf3c1Tff7b72.Td2a8fflonTb4b4b4, Te6edf3c2Tff7b72.Td2a8fflatTb4b4b4, Te6edf3c2Tff7b72.Td2a8fflonTb4b4b4)Tb4b4b4)
Te6edf3bbox Tff7b72= Te6edf3AliasPropertyTb4b4b4(Te6edf3get_bboxTb4b4b4, Tff7b72NoneTb4b4b4, Te6edf3bindTff7b72=Tb4b4b4[Ta5d6ff"Ta5d6fflatTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflonTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_zoomTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffunloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e"""Unload the view and all the layers.
It also cancel all the remaining downloads.
"""
Tff7b72selfTff7b72.Td2a8ffremove_all_tilesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_window_xy_fromTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3latTb4b4b4, Te6edf3lonTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
T8b949e"""Returns the x/y position in the widget absolute coordinates
from a lat/lon"""
Te6edf3scale Tff7b72= Tff7b72selfTff7b72.Td2a8ffscale
Te6edf3vxTb4b4b4, Te6edf3vy Tff7b72= Tff7b72selfTff7b72.Td2a8ffviewport_pos
Te6edf3ms Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3x Tff7b72= Te6edf3msTff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4) Tff7b72- Te6edf3vx
Te6edf3y Tff7b72= Te6edf3msTff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4) Tff7b72- Te6edf3vy
Te6edf3x Tff7b72*Tff7b72= Te6edf3scale
Te6edf3y Tff7b72*Tff7b72= Te6edf3scale
Te6edf3x Tff7b72= Te6edf3x Tff7b72+ Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3y Tff7b72= Te6edf3y Tff7b72+ Tff7b72selfTff7b72.Td2a8ffposTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72return Te6edf3xTb4b4b4, Te6edf3y
Tff7b72def Td2a8ffcenter_onTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
T8b949e"""Center the map on the coordinate :class:`Coordinate`, or a (lat, lon)
"""
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Tff7b72if Tffa657lenTb4b4b4(Te6edf3argsTb4b4b4) Tff7b72== T79c0ff1 Tff7b72and Tffa657isinstanceTb4b4b4(Te6edf3argsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3CoordinateTb4b4b4)Tb4b4b4:
Te6edf3coord Tff7b72= Te6edf3argsTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3lat Tff7b72= Te6edf3coordTff7b72.Td2a8fflat
Te6edf3lon Tff7b72= Te6edf3coordTff7b72.Td2a8fflon
Tff7b72elif Tffa657lenTb4b4b4(Te6edf3argsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3latTb4b4b4, Te6edf3lon Tff7b72= Te6edf3args
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffInvalid argument for center_onTa5d6ff"Tb4b4b4)
Te6edf3lon Tff7b72= Te6edf3clampTb4b4b4(Te6edf3lonTb4b4b4, Te6edf3MIN_LONGITUDETb4b4b4, Te6edf3MAX_LONGITUDETb4b4b4)
Te6edf3lat Tff7b72= Te6edf3clampTb4b4b4(Te6edf3latTb4b4b4, Te6edf3MIN_LATITUDETb4b4b4, Te6edf3MAX_LATITUDETb4b4b4)
Te6edf3scale Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffscale
Te6edf3x Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffcenter_x Tff7b72/ Te6edf3scale
Te6edf3y Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffcenter_y Tff7b72/ Te6edf3scale
Tff7b72selfTff7b72.Td2a8ffdelta_x Tff7b72= Tff7b72-Te6edf3x
Tff7b72selfTff7b72.Td2a8ffdelta_y Tff7b72= Tff7b72-Te6edf3y
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3lon
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3lat
Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffpos Tff7b72= T79c0ff0Tb4b4b4, T79c0ff0
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffset_zoom_atTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3scaleTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""Sets the zoom level, leaving the (x, y) at the exact same point
in the view.
"""
Te6edf3zoom Tff7b72= Te6edf3clampTb4b4b4(
Te6edf3zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_min_zoomTb4b4b4(Tb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_max_zoomTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72if Tffa657intTb4b4b4(Te6edf3zoomTb4b4b4) Tff7b72== Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3scale Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Tff7b72elif Te6edf3scale Tff7b72== Tff7b72selfTff7b72.Td2a8ffscaleTb4b4b4:
Tff7b72return
Te6edf3scale Tff7b72= Te6edf3scale Tff7b72or T79c0ff1.0
T8b949e# first, rescale the scatter
Te6edf3scatter Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatter
Te6edf3scale Tff7b72= Te6edf3clampTb4b4b4(Te6edf3scaleTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffscale_minTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffscale_maxTb4b4b4)
Te6edf3rescale Tff7b72= Te6edf3scale Tff7b72* T79c0ff1.0 Tff7b72/ Te6edf3scatterTff7b72.Td2a8ffscale
Te6edf3scatterTff7b72.Td2a8ffapply_transformTb4b4b4(
Te6edf3MatrixTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffscaleTb4b4b4(Te6edf3rescaleTb4b4b4, Te6edf3rescaleTb4b4b4, Te6edf3rescaleTb4b4b4)Tb4b4b4,
Te6edf3post_multiplyTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3anchorTff7b72=Te6edf3scatterTff7b72.Td2a8ffto_localTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e# adjust position if the zoom changed
Te6edf3c1 Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_col_countTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4)
Te6edf3c2 Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_col_countTb4b4b4(Te6edf3zoomTb4b4b4)
Tff7b72if Te6edf3c1 Tff7b72!= Te6edf3c2Tb4b4b4:
Te6edf3f Tff7b72= Tffa657floatTb4b4b4(Te6edf3c2Tb4b4b4) Tff7b72/ Tffa657floatTb4b4b4(Te6edf3c1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelta_x Tff7b72= Te6edf3scatterTff7b72.Td2a8ffx Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_x Tff7b72* Te6edf3f
Tff7b72selfTff7b72.Td2a8ffdelta_y Tff7b72= Te6edf3scatterTff7b72.Td2a8ffy Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_y Tff7b72* Te6edf3f
T8b949e# back to 0 every time
Te6edf3scatterTff7b72.Td2a8ffapply_transformTb4b4b4(
Te6edf3MatrixTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fftranslateTb4b4b4(Tff7b72-Te6edf3scatterTff7b72.Td2a8ffxTb4b4b4, Tff7b72-Te6edf3scatterTff7b72.Td2a8ffyTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3post_multiplyTff7b72=Tff7b72True
Tb4b4b4)
T8b949e# avoid triggering zoom changes.
Tff7b72selfTff7b72.Td2a8ff_zoom Tff7b72= Te6edf3zoom
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Tff7b72def Td2a8ffon_zoomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3zoom Tff7b72== Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4:
Tff7b72return
Te6edf3x Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8fflonTb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_x
Te6edf3y Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8fflatTb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_y
Tff7b72selfTff7b72.Td2a8ffset_zoom_atTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8fflonTb4b4b4)
Tff7b72def Td2a8ffget_latlon_atTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zoomTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""Return the current :class:`Coordinate` within the (x, y) widget
coordinate.
"""
Tff7b72if Te6edf3zoom Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3vxTb4b4b4, Te6edf3vy Tff7b72= Tff7b72selfTff7b72.Td2a8ffviewport_pos
Te6edf3scale Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale
Tff7b72return Te6edf3CoordinateTb4b4b4(
Te6edf3latTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_latTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3y Tff7b72/ Te6edf3scale Tff7b72+ Te6edf3vyTb4b4b4)Tb4b4b4,
Te6edf3lonTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_lonTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3x Tff7b72/ Te6edf3scale Tff7b72+ Te6edf3vxTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ffadd_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4, Te6edf3layerTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e"""Add a marker into the layer. If layer is None, it will be added in
the default marker layer. If there is no default marker layer, a new
one will be automatically created
"""
Tff7b72if Te6edf3layer Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_default_marker_layerTb4b4b4:
Te6edf3layer Tff7b72= Te6edf3MarkerMapLayerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffadd_layerTb4b4b4(Te6edf3layerTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3layer Tff7b72= Tff7b72selfTff7b72.Td2a8ff_default_marker_layer
Te6edf3layerTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3layerTff7b72.Td2a8ffset_marker_positionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)
Tff7b72def Td2a8ffremove_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3markerTb4b4b4)Tb4b4b4:
T8b949e"""Remove a marker from its layer
"""
Te6edf3markerTff7b72.Td2a8ffdetachTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffadd_layerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3layerTb4b4b4, Te6edf3modeTff7b72=Ta5d6ff"Ta5d6ffwindowTa5d6ff"Tb4b4b4)Tb4b4b4:
T8b949e"""Add a new layer to update at the same time the base tile layer.
mode can be either "scatter" or "window". If "scatter", it means the
layer will be within the scatter transformation. It's perfect if you
want to display path / shape, but not for text.
If "window", it will have no transformation. You need to position the
widget yourself: think as Z-sprite / billboard.
Defaults to "window".
"""
Tff7b72assert Te6edf3mode Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffscatterTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwindowTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_default_marker_layer Tff7b72is Tff7b72None Tff7b72and Tffa657isinstanceTb4b4b4(Te6edf3layerTb4b4b4, Te6edf3MarkerMapLayerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_default_marker_layer Tff7b72= Te6edf3layer
Tff7b72selfTff7b72.Td2a8ff_layersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3layerTb4b4b4)
Te6edf3c Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas
Tff7b72if Te6edf3mode Tff7b72== Ta5d6ff"Ta5d6ffscatterTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas_layers
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas_layers_out
Te6edf3layerTff7b72.Td2a8ffcanvas_parent Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3layerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Te6edf3c
Tff7b72def Td2a8ffremove_layerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3layerTb4b4b4)Tb4b4b4:
T8b949e"""Remove the layer
"""
Te6edf3c Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas
Tff7b72selfTff7b72.Td2a8ff_layersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3layerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Te6edf3layerTff7b72.Td2a8ffcanvas_parent
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3layerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Te6edf3c
Tff7b72def Td2a8ffsync_toTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3otherTb4b4b4)Tb4b4b4:
T8b949e"""Reflect the lat/lon/zoom of the other MapView to the current one.
"""
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_zoom Tff7b72!= Te6edf3otherTff7b72.Td2a8ff_zoomTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_zoom_atTb4b4b4(Te6edf3otherTff7b72.Td2a8ff_zoomTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ffcenterTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcenter_onTb4b4b4(Te6edf3otherTff7b72.Td2a8ffget_latlon_atTb4b4b4(Tff7b72*Tff7b72selfTff7b72.Td2a8ffcenterTb4b4b4)Tb4b4b4)
T8b949e# Private API
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787kivyT7ee787.T7ee787base Tff7b72import Te6edf3EventLoop
Te6edf3EventLoopTff7b72.Td2a8ffensure_windowTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_invalid_scale Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ff_tiles Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_tiles_bg Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_tilemap Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_layers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_default_marker_layer Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ff_need_redraw_all Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_transform_lock Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas Tff7b72= Te6edf3CanvasTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_scatter Tff7b72= Te6edf3MapViewScatterTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_scatterTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffcanvasTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcanvas_map Tff7b72= Te6edf3CanvasTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_layers Tff7b72= Te6edf3CanvasTb4b4b4(Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffcanvasTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcanvas_layers_out Tff7b72= Te6edf3CanvasTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_scale_target_anim Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72= T79c0ff1.0
Tff7b72selfTff7b72.Td2a8ff_touch_count Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffcache_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffcache_dir
Te6edf3ClockTff7b72.Td2a8ffschedule_intervalTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_animate_colorTb4b4b4, T79c0ff1 Tff7b72/ T79c0ff60.0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflatTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8fflatTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Te6edf3kwargsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflonTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8fflonTb4b4b4)
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72def Td2a8ff_animate_colorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
T8b949e# fast path
Te6edf3d Tff7b72= Tff7b72selfTff7b72.Td2a8ffanimation_duration
Tff7b72if Te6edf3d Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tilesTb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72= T79c0ff1.0
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffanimatedTa5d6ff"
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tiles_bgTb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72= T79c0ff1.0
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffanimatedTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3d Tff7b72= Te6edf3d Tff7b72/ T79c0ff1000.0
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tilesTb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72!= Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"Tb4b4b4:
Tff7b72continue
Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72+Tff7b72= Te6edf3dt Tff7b72/ Te6edf3d
Tff7b72if Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72>Tff7b72= T79c0ff1Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffanimatedTa5d6ff"
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tiles_bgTb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72!= Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"Tb4b4b4:
Tff7b72continue
Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72+Tff7b72= Te6edf3dt Tff7b72/ Te6edf3d
Tff7b72if Te6edf3tileTff7b72.Td2a8ffg_colorTff7b72.Td2a8ffa Tff7b72>Tff7b72= T79c0ff1Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffanimatedTa5d6ff"
Tff7b72def Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MapMarkerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffadd_markerTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MapLayerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffadd_layerTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MapMarkerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffremove_markerTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MapLayerTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffremove_layerTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ffon_map_relocatedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3coordTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffanimated_diff_scale_atTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scale_target_pos Tff7b72= Te6edf3xTb4b4b4, Te6edf3y
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_scale_target_anim Tff7b72is Tff7b72FalseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scale_target_anim Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72= Te6edf3d
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72+Tff7b72= Te6edf3d
T8b949e# print(f"Scale = {self._scale} Target begin = {self._scale_target}")
Te6edf3ClockTff7b72.Td2a8ffunscheduleTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_animate_scaleTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_intervalTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_animate_scaleTb4b4b4, T79c0ff1 Tff7b72/ T79c0ff60.0Tb4b4b4)
Tff7b72def Td2a8ff_animate_scaleTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3diff Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72/ T79c0ff3.0
Tff7b72if Tffa657absTb4b4b4(Te6edf3diffTb4b4b4) Tff7b72< T79c0ff0.01Tb4b4b4:
Te6edf3diff Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale_target
Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72-Tff7b72= Te6edf3diff
Te6edf3final Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72== T79c0ff0
Tff7b72selfTff7b72.Td2a8ffdiff_scale_atTb4b4b4(Te6edf3diffTb4b4b4, Tff7b72*Tff7b72selfTff7b72.Td2a8ff_scale_target_posTb4b4b4, Te6edf3final Tff7b72= Te6edf3finalTb4b4b4)
T8b949e# print(f"Scale = {self._scale} Target now = {self._scale_target} Diff = {diff}")
Te6edf3ret Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale_target Tff7b72!= T79c0ff0
Tff7b72if Tff7b72not Te6edf3retTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_pause Tff7b72= Tff7b72False
Tff7b72return Te6edf3ret
Tff7b72def Td2a8ffdiff_scale_atTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3final Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3scatter Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatter
Te6edf3scale Tff7b72= Te6edf3scatterTff7b72.Td2a8ffscale Tff7b72* Tb4b4b4(T79c0ff2 Tff7b72*Tff7b72* Te6edf3dTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscale_atTb4b4b4(Te6edf3scaleTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3final Tff7b72= Te6edf3finalTb4b4b4)
Tff7b72def Td2a8ffscale_atTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3scaleTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3final Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3snap_digits Tff7b72= T79c0ff1
Te6edf3scatter Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatter
Te6edf3scale Tff7b72= Te6edf3clampTb4b4b4(Te6edf3scaleTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffscale_minTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffscale_maxTb4b4b4)
Te6edf3rescale Tff7b72= Te6edf3scale Tff7b72* T79c0ff1.0 Tff7b72/ Te6edf3scatterTff7b72.Td2a8ffscale
Te6edf3scatterTff7b72.Td2a8ffapply_transformTb4b4b4(
Te6edf3MatrixTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffscaleTb4b4b4(Te6edf3rescaleTb4b4b4, Te6edf3rescaleTb4b4b4, Te6edf3rescaleTb4b4b4)Tb4b4b4,
Te6edf3post_multiplyTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3anchorTff7b72=Te6edf3scatterTff7b72.Td2a8ffto_localTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e# Create a final transform to always land on well-
T8b949e# defined scaling factors
Tff7b72if Te6edf3final Tff7b72and Tff7b72selfTff7b72.Td2a8ff_allow_snapTb4b4b4:
Te6edf3int_diff Tff7b72= Tffa657absTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_scaleTff7b72-T79c0ff1.0Tb4b4b4)
Te6edf3diff Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scaleTff7b72-T79c0ff1.0
Tff7b72if Te6edf3int_diff Tff7b72< T79c0ff0.08Tb4b4b4:
Te6edf3target Tff7b72= Te6edf3scatterTff7b72.Td2a8ffscaleTff7b72-Te6edf3diff
Te6edf3factor Tff7b72= Te6edf3targetTff7b72/Te6edf3scatterTff7b72.Td2a8ffscale
Te6edf3scatterTff7b72.Td2a8ffapply_transformTb4b4b4(
Te6edf3MatrixTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffscaleTb4b4b4(Te6edf3factorTb4b4b4, Te6edf3factorTb4b4b4, Te6edf3factorTb4b4b4)Tb4b4b4,
Te6edf3post_multiplyTff7b72=Tff7b72TrueTb4b4b4,
Te6edf3anchorTff7b72=Te6edf3scatterTff7b72.Td2a8ffto_localTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4,
Tb4b4b4)
T8b949e# print(f"Snapped scale. Self = {self._scale} Scale = {scale}")
Tff7b72elseTb4b4b4:
Tff7b72pass
T8b949e# print(f"Self = {self._scale} Scale = {scale} Rescale = {rescale} Zoom = {self.zoom}")
Tff7b72def Td2a8ffon_touch_downTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffcollide_pointTb4b4b4(Tff7b72*Te6edf3touchTff7b72.Td2a8ffposTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpause_on_actionTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_pause Tff7b72= Tff7b72True
T8b949e# if "button" in touch.profile:
T8b949e# print(f"Scale = {self._scale} Scatter = {self._scatter.scale}")
Tff7b72if Ta5d6ff"Ta5d6ffbuttonTa5d6ff" Tff7b72in Te6edf3touchTff7b72.Td2a8ffprofile Tff7b72and Te6edf3touchTff7b72.Td2a8ffbutton Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffscrolldownTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffscrollupTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_allow_snap Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsnap_to_zoomTb4b4b4:
Te6edf3d Tff7b72= T79c0ff1 Tff7b72if Te6edf3touchTff7b72.Td2a8ffbutton Tff7b72== Ta5d6ff"Ta5d6ffscrolldownTa5d6ff" Tff7b72else Tff7b72-T79c0ff1
Tff7b72elseTb4b4b4:
Te6edf3d Tff7b72= T79c0ff0.1 Tff7b72if Te6edf3touchTff7b72.Td2a8ffbutton Tff7b72== Ta5d6ff"Ta5d6ffscrolldownTa5d6ff" Tff7b72else Tff7b72-T79c0ff0.1
Tff7b72selfTff7b72.Td2a8ffanimated_diff_scale_atTb4b4b4(Te6edf3dTb4b4b4, Tff7b72*Te6edf3touchTff7b72.Td2a8ffposTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72elif Te6edf3touchTff7b72.Td2a8ffis_double_tap Tff7b72and Tff7b72selfTff7b72.Td2a8ffdouble_tap_zoomTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_allow_snap Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_scale Tff7b72< T79c0ff1.0Tb4b4b4:
Te6edf3dz Tff7b72= Tb4b4b4(T79c0ff1Tff7b72/Tff7b72selfTff7b72.Td2a8ff_scaleTb4b4b4)Tff7b72-T79c0ff1
Tff7b72elseTb4b4b4:
Te6edf3next_scale Tff7b72= T79c0ff2.0
Te6edf3dz Tff7b72= Tb4b4b4(Te6edf3next_scaleTff7b72/Tff7b72selfTff7b72.Td2a8ff_scaleTb4b4b4)Tff7b72-T79c0ff1.0
T8b949e# print(f"Diff zoom {self._scale} factor = {dz}")
Tff7b72selfTff7b72.Td2a8ffanimated_diff_scale_atTb4b4b4(Te6edf3dzTb4b4b4, Tff7b72*Te6edf3touchTff7b72.Td2a8ffposTb4b4b4)
Tff7b72return Tff7b72True
Te6edf3touchTff7b72.Td2a8ffgrabTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_touch_count Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_touch_count Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_touch_zoom Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffzoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ff_scaleTb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffon_touch_downTb4b4b4(Te6edf3touchTb4b4b4)
Tff7b72def Td2a8ffon_touch_upTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3touchTff7b72.Td2a8ffgrab_current Tff7b72== Tff7b72selfTb4b4b4:
Te6edf3touchTff7b72.Td2a8ffungrabTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_touch_count Tff7b72-Tff7b72= T79c0ff1
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_touch_count Tff7b72== T79c0ff0Tb4b4b4:
T8b949e# animate to the closest zoom
T8b949e# zoom, scale = self._touch_zoom
T8b949e# cur_zoom = self.zoom
T8b949e# cur_scale = self._scale
T8b949e# if cur_zoom < zoom or round(cur_scale, 2) < scale:
T8b949e# self.animated_diff_scale_at(1.0 - cur_scale, *touch.pos)
T8b949e# elif cur_zoom > zoom or round(cur_scale, 2) > scale:
T8b949e# self.animated_diff_scale_at(2.0 - cur_scale, *touch.pos)
Tff7b72selfTff7b72.Td2a8ff_pause Tff7b72= Tff7b72False
Tff7b72return Tff7b72True
Tff7b72return Tffa657superTb4b4b4(Te6edf3MapViewTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffon_touch_upTb4b4b4(Te6edf3touchTb4b4b4)
Tff7b72def Td2a8ffon_transformTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_invalid_scale Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_transform_lockTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ff_transform_lock Tff7b72= Tff7b72True
T8b949e# recalculate viewport
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3scatter Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatter
Te6edf3scale Tff7b72= Te6edf3scatterTff7b72.Td2a8ffscale
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhigh_resTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffhigh_res_mode Tff7b72== T79c0ff2Tb4b4b4:
T8b949e# Double resolution mode
Tff7b72if Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72>Tff7b72= T79c0ff1.0Tb4b4b4:
Te6edf3zoom Tff7b72+Tff7b72= T79c0ff1
Te6edf3scale Tff7b72/Tff7b72= T79c0ff2.0
Tff7b72elif Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72< T79c0ff0.5Tb4b4b4:
Te6edf3zoom Tff7b72-Tff7b72= T79c0ff1
Te6edf3scale Tff7b72*Tff7b72= T79c0ff2.0
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffhigh_res_mode Tff7b72== T79c0ff1Tb4b4b4:
T8b949e# Improved resolution mode
Tff7b72if Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72>Tff7b72= T79c0ff1.2Tb4b4b4:
Te6edf3zoom Tff7b72+Tff7b72= T79c0ff1
Te6edf3scale Tff7b72/Tff7b72= T79c0ff2.0
Tff7b72elif Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72< T79c0ff0.6Tb4b4b4:
Te6edf3zoom Tff7b72-Tff7b72= T79c0ff1
Te6edf3scale Tff7b72*Tff7b72= T79c0ff2.0
Tff7b72elseTb4b4b4:
T8b949e# if round(scale, 2) >= 2.0:
T8b949e# zoom += 1
T8b949e# scale /= 2.0
T8b949e# elif round(scale, 2) < 1.0:
T8b949e# zoom -= 1
T8b949e# scale *= 2.0
Tff7b72if Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72>Tff7b72= T79c0ff1.75Tb4b4b4:
Te6edf3zoom Tff7b72+Tff7b72= T79c0ff1
Te6edf3scale Tff7b72/Tff7b72= T79c0ff2.0
Tff7b72elif Tffa657roundTb4b4b4(Te6edf3scaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72< T79c0ff0.875Tb4b4b4:
Te6edf3zoom Tff7b72-Tff7b72= T79c0ff1
Te6edf3scale Tff7b72*Tff7b72= T79c0ff2.0
Te6edf3zoom Tff7b72= Te6edf3clampTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3map_sourceTff7b72.Td2a8ffmin_zoomTb4b4b4, Te6edf3map_sourceTff7b72.Td2a8ffmax_zoomTb4b4b4)
Tff7b72if Te6edf3zoom Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_zoom_atTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffxTb4b4b4, Te6edf3scatterTff7b72.Td2a8ffyTb4b4b4, Te6edf3scaleTff7b72=Te6edf3scaleTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3zoom Tff7b72== Te6edf3map_sourceTff7b72.Td2a8ffmin_zoom Tff7b72and Tffa657roundTb4b4b4(Te6edf3scatterTff7b72.Td2a8ffscaleTb4b4b4, T79c0ff2Tb4b4b4) Tff7b72< T79c0ff1.0Tb4b4b4:
Te6edf3scatterTff7b72.Td2a8ffscale Tff7b72= T79c0ff1.0
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3map_sourceTff7b72.Td2a8ffboundsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_apply_boundsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_transform_lock Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ff_scale Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffscale
Tff7b72def Td2a8ff_apply_boundsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# if the map_source have any constraints, apply them here.
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3min_lonTb4b4b4, Te6edf3min_latTb4b4b4, Te6edf3max_lonTb4b4b4, Te6edf3max_lat Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffbounds
Te6edf3xmin Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3min_lonTb4b4b4)
Te6edf3xmax Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3max_lonTb4b4b4)
Te6edf3ymin Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3min_latTb4b4b4)
Te6edf3ymax Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3max_latTb4b4b4)
Te6edf3dx Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelta_x
Te6edf3dy Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelta_y
Te6edf3oxminTb4b4b4, Te6edf3oymin Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffto_localTb4b4b4(Tff7b72selfTff7b72.Td2a8ffxTb4b4b4, Tff7b72selfTff7b72.Td2a8ffyTb4b4b4)
Te6edf3oxmaxTb4b4b4, Te6edf3oymax Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffto_localTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrightTb4b4b4, Tff7b72selfTff7b72.Td2a8fftopTb4b4b4)
Te6edf3s Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale
Te6edf3cxmin Tff7b72= Te6edf3oxmin Tff7b72- Te6edf3dx
Tff7b72if Te6edf3cxmin Tff7b72< Te6edf3xminTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffx Tff7b72+Tff7b72= Tb4b4b4(Te6edf3cxmin Tff7b72- Te6edf3xminTb4b4b4) Tff7b72* Te6edf3s
Te6edf3cymin Tff7b72= Te6edf3oymin Tff7b72- Te6edf3dy
Tff7b72if Te6edf3cymin Tff7b72< Te6edf3yminTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffy Tff7b72+Tff7b72= Tb4b4b4(Te6edf3cymin Tff7b72- Te6edf3yminTb4b4b4) Tff7b72* Te6edf3s
Te6edf3cxmax Tff7b72= Te6edf3oxmax Tff7b72- Te6edf3dx
Tff7b72if Te6edf3cxmax Tff7b72> Te6edf3xmaxTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffx Tff7b72-Tff7b72= Tb4b4b4(Te6edf3xmax Tff7b72- Te6edf3cxmaxTb4b4b4) Tff7b72* Te6edf3s
Te6edf3cymax Tff7b72= Te6edf3oymax Tff7b72- Te6edf3dy
Tff7b72if Te6edf3cymax Tff7b72> Te6edf3ymaxTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffy Tff7b72-Tff7b72= Tb4b4b4(Te6edf3ymax Tff7b72- Te6edf3cymaxTb4b4b4) Tff7b72* Te6edf3s
Tff7b72def Td2a8ffon__pauseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3valueTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftrigger_updateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3fullTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_need_redraw_full Tff7b72= Te6edf3full Tff7b72or Tff7b72selfTff7b72.Td2a8ff_need_redraw_full
Te6edf3ClockTff7b72.Td2a8ffunscheduleTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdo_updateTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdo_updateTb4b4b4, Tff7b72-T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ffdo_updateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3scale Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale
Tff7b72selfTff7b72.Td2a8fflon Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_lonTb4b4b4(
Te6edf3zoomTb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffcenter_x Tff7b72- Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffxTb4b4b4) Tff7b72/ Te6edf3scale Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_x
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflat Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_latTb4b4b4(
Te6edf3zoomTb4b4b4, Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffcenter_y Tff7b72- Tff7b72selfTff7b72.Td2a8ff_scatterTff7b72.Td2a8ffyTb4b4b4) Tff7b72/ Te6edf3scale Tff7b72- Tff7b72selfTff7b72.Td2a8ffdelta_y
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_map_relocatedTa5d6ff"Tb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3CoordinateTb4b4b4(Tff7b72selfTff7b72.Td2a8fflonTb4b4b4, Tff7b72selfTff7b72.Td2a8fflatTb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3layer Tff7b72in Tff7b72selfTff7b72.Td2a8ff_layersTb4b4b4:
Te6edf3layerTff7b72.Td2a8ffrepositionTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_need_redraw_fullTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_need_redraw_full Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffmove_tiles_to_backgroundTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffload_visible_tilesTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffload_visible_tilesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffbbox_for_zoomTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3vxTb4b4b4, Te6edf3vyTb4b4b4, Te6edf3wTb4b4b4, Te6edf3hTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
T8b949e# return a tile-bbox for the zoom
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3size Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffdp_tile_size
Te6edf3scale Tff7b72= Tff7b72selfTff7b72.Td2a8ff_scale
Te6edf3max_x_end Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_col_countTb4b4b4(Te6edf3zoomTb4b4b4)
Te6edf3max_y_end Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffget_row_countTb4b4b4(Te6edf3zoomTb4b4b4)
Te6edf3x_count Tff7b72= Tffa657intTb4b4b4(Te6edf3ceilTb4b4b4(Te6edf3w Tff7b72/ Te6edf3scale Tff7b72/ Tffa657floatTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72+ T79c0ff1
Te6edf3y_count Tff7b72= Tffa657intTb4b4b4(Te6edf3ceilTb4b4b4(Te6edf3h Tff7b72/ Te6edf3scale Tff7b72/ Tffa657floatTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72+ T79c0ff1
Te6edf3tile_x_first Tff7b72= Tffa657intTb4b4b4(Te6edf3clampTb4b4b4(Te6edf3vx Tff7b72/ Tffa657floatTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3max_x_endTb4b4b4)Tb4b4b4)
Te6edf3tile_y_first Tff7b72= Tffa657intTb4b4b4(Te6edf3clampTb4b4b4(Te6edf3vy Tff7b72/ Tffa657floatTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Te6edf3max_y_endTb4b4b4)Tb4b4b4)
Te6edf3tile_x_last Tff7b72= Te6edf3tile_x_first Tff7b72+ Te6edf3x_count
Te6edf3tile_y_last Tff7b72= Te6edf3tile_y_first Tff7b72+ Te6edf3y_count
Te6edf3tile_x_last Tff7b72= Tffa657intTb4b4b4(Te6edf3clampTb4b4b4(Te6edf3tile_x_lastTb4b4b4, Te6edf3tile_x_firstTb4b4b4, Te6edf3max_x_endTb4b4b4)Tb4b4b4)
Te6edf3tile_y_last Tff7b72= Tffa657intTb4b4b4(Te6edf3clampTb4b4b4(Te6edf3tile_y_lastTb4b4b4, Te6edf3tile_y_firstTb4b4b4, Te6edf3max_y_endTb4b4b4)Tb4b4b4)
Te6edf3x_count Tff7b72= Te6edf3tile_x_last Tff7b72- Te6edf3tile_x_first
Te6edf3y_count Tff7b72= Te6edf3tile_y_last Tff7b72- Te6edf3tile_y_first
Tff7b72return Tb4b4b4(Te6edf3tile_x_firstTb4b4b4, Te6edf3tile_y_firstTb4b4b4, Te6edf3tile_x_lastTb4b4b4, Te6edf3tile_y_lastTb4b4b4, Te6edf3x_countTb4b4b4, Te6edf3y_countTb4b4b4)
Tff7b72def Td2a8ffload_visible_tilesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3map_source Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_source
Te6edf3vxTb4b4b4, Te6edf3vy Tff7b72= Tff7b72selfTff7b72.Td2a8ffviewport_pos
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3dirs Tff7b72= Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72-T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4]
Te6edf3bbox_for_zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ffbbox_for_zoom
Te6edf3size Tff7b72= Te6edf3map_sourceTff7b72.Td2a8ffdp_tile_size
Tb4b4b4(
Te6edf3tile_x_firstTb4b4b4,
Te6edf3tile_y_firstTb4b4b4,
Te6edf3tile_x_lastTb4b4b4,
Te6edf3tile_y_lastTb4b4b4,
Te6edf3x_countTb4b4b4,
Te6edf3y_countTb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3bbox_for_zoomTb4b4b4(Te6edf3vxTb4b4b4, Te6edf3vyTb4b4b4, Tff7b72selfTff7b72.Td2a8ffwidthTb4b4b4, Tff7b72selfTff7b72.Td2a8ffheightTb4b4b4, Te6edf3zoomTb4b4b4)
T8b949e# Adjust tiles behind us
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tiles_bgTb4b4b4[Tb4b4b4:Tb4b4b4]Tb4b4b4:
Te6edf3tile_x Tff7b72= Te6edf3tileTff7b72.Td2a8fftile_x
Te6edf3tile_y Tff7b72= Te6edf3tileTff7b72.Td2a8fftile_y
Te6edf3f Tff7b72= T79c0ff2 Tff7b72*Tff7b72* Tb4b4b4(Te6edf3zoom Tff7b72- Te6edf3tileTff7b72.Td2a8ffzoomTb4b4b4)
Te6edf3w Tff7b72= Tff7b72selfTff7b72.Td2a8ffwidth Tff7b72/ Te6edf3f
Te6edf3h Tff7b72= Tff7b72selfTff7b72.Td2a8ffheight Tff7b72/ Te6edf3f
Tb4b4b4(
Te6edf3btile_x_firstTb4b4b4,
Te6edf3btile_y_firstTb4b4b4,
Te6edf3btile_x_lastTb4b4b4,
Te6edf3btile_y_lastTb4b4b4,
Te6edf3_Tb4b4b4,
Te6edf3_Tb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3bbox_for_zoomTb4b4b4(Te6edf3vx Tff7b72/ Te6edf3fTb4b4b4, Te6edf3vy Tff7b72/ Te6edf3fTb4b4b4, Te6edf3wTb4b4b4, Te6edf3hTb4b4b4, Te6edf3tileTff7b72.Td2a8ffzoomTb4b4b4)
Tff7b72if Tb4b4b4(
Te6edf3tile_x Tff7b72< Te6edf3btile_x_first
Tff7b72or Te6edf3tile_x Tff7b72>Tff7b72= Te6edf3btile_x_last
Tff7b72or Te6edf3tile_y Tff7b72< Te6edf3btile_y_first
Tff7b72or Te6edf3tile_y Tff7b72>Tff7b72= Te6edf3btile_y_last
Tb4b4b4)Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72selfTff7b72.Td2a8ff_tiles_bgTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTff7b72.Td2a8ffg_colorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72continue
Te6edf3tsize Tff7b72= Te6edf3size Tff7b72* Te6edf3f
Te6edf3tileTff7b72.Td2a8ffsize Tff7b72= Te6edf3tsizeTb4b4b4, Te6edf3tsize
Te6edf3tileTff7b72.Td2a8ffpos Tff7b72= Tb4b4b4(Te6edf3tile_x Tff7b72* Te6edf3tsize Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_xTb4b4b4, Te6edf3tile_y Tff7b72* Te6edf3tsize Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_yTb4b4b4)
T8b949e# Get rid of old tiles first
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tilesTb4b4b4[Tb4b4b4:Tb4b4b4]Tb4b4b4:
Te6edf3tile_x Tff7b72= Te6edf3tileTff7b72.Td2a8fftile_x
Te6edf3tile_y Tff7b72= Te6edf3tileTff7b72.Td2a8fftile_y
Tff7b72if Tb4b4b4(
Te6edf3tile_x Tff7b72< Te6edf3tile_x_first
Tff7b72or Te6edf3tile_x Tff7b72>Tff7b72= Te6edf3tile_x_last
Tff7b72or Te6edf3tile_y Tff7b72< Te6edf3tile_y_first
Tff7b72or Te6edf3tile_y Tff7b72>Tff7b72= Te6edf3tile_y_last
Tb4b4b4)Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72selfTff7b72.Td2a8fftile_map_setTb4b4b4(Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_tilesTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTff7b72.Td2a8ffg_colorTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3tileTff7b72.Td2a8ffsize Tff7b72= Tb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3sizeTb4b4b4)
Te6edf3tileTff7b72.Td2a8ffpos Tff7b72= Tb4b4b4(Te6edf3tile_x Tff7b72* Te6edf3size Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_xTb4b4b4, Te6edf3tile_y Tff7b72* Te6edf3size Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_yTb4b4b4)
T8b949e# Load new tiles if needed
Te6edf3x Tff7b72= Te6edf3tile_x_first Tff7b72+ Te6edf3x_count Tff7b72/Tff7b72/ T79c0ff2 Tff7b72- T79c0ff1
Te6edf3y Tff7b72= Te6edf3tile_y_first Tff7b72+ Te6edf3y_count Tff7b72/Tff7b72/ T79c0ff2 Tff7b72- T79c0ff1
Te6edf3arm_max Tff7b72= Tffa657maxTb4b4b4(Te6edf3x_countTb4b4b4, Te6edf3y_countTb4b4b4) Tff7b72+ T79c0ff2
Te6edf3arm_size Tff7b72= T79c0ff1
Te6edf3turn Tff7b72= T79c0ff0
Tff7b72while Te6edf3arm_size Tff7b72< Te6edf3arm_maxTb4b4b4:
Tff7b72for Te6edf3i Tff7b72in Tffa657rangeTb4b4b4(Te6edf3arm_sizeTb4b4b4)Tb4b4b4:
Tff7b72if Tb4b4b4(
Tff7b72not Tff7b72selfTff7b72.Td2a8fftile_in_tile_mapTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4)
Tff7b72and Te6edf3y Tff7b72>Tff7b72= Te6edf3tile_y_first
Tff7b72and Te6edf3y Tff7b72< Te6edf3tile_y_last
Tff7b72and Te6edf3x Tff7b72>Tff7b72= Te6edf3tile_x_first
Tff7b72and Te6edf3x Tff7b72< Te6edf3tile_x_last
Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffload_tileTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3zoomTb4b4b4)
Te6edf3x Tff7b72+Tff7b72= Te6edf3dirsTb4b4b4[Te6edf3turn Tff7b72% T79c0ff4 Tff7b72+ T79c0ff1Tb4b4b4]
Te6edf3y Tff7b72+Tff7b72= Te6edf3dirsTb4b4b4[Te6edf3turn Tff7b72% T79c0ff4Tb4b4b4]
Tff7b72if Te6edf3turn Tff7b72% T79c0ff2 Tff7b72== T79c0ff1Tb4b4b4:
Te6edf3arm_size Tff7b72+Tff7b72= T79c0ff1
Te6edf3turn Tff7b72+Tff7b72= T79c0ff1
Tff7b72def Td2a8ffload_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftile_in_tile_mapTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4) Tff7b72or Te6edf3zoom Tff7b72!= Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffload_tile_for_sourceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_sourceTb4b4b4, T79c0ff1.0Tb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zoomTb4b4b4)
T8b949e# XXX do overlay support
Tff7b72selfTff7b72.Td2a8fftile_map_setTb4b4b4(Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffload_tile_for_sourceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3map_sourceTb4b4b4, Te6edf3opacityTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3xTb4b4b4, Te6edf3yTb4b4b4, Te6edf3zoomTb4b4b4)Tb4b4b4:
Te6edf3tile Tff7b72= Te6edf3TileTb4b4b4(Te6edf3sizeTff7b72=Tb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4, Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)
Te6edf3tileTff7b72.Td2a8ffg_color Tff7b72= Te6edf3ColorTb4b4b4(T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4)
Te6edf3tileTff7b72.Td2a8fftile_x Tff7b72= Te6edf3x
Te6edf3tileTff7b72.Td2a8fftile_y Tff7b72= Te6edf3y
Te6edf3tileTff7b72.Td2a8ffzoom Tff7b72= Te6edf3zoom
Te6edf3tileTff7b72.Td2a8ffpos Tff7b72= Tb4b4b4(Te6edf3x Tff7b72* Te6edf3size Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_xTb4b4b4, Te6edf3y Tff7b72* Te6edf3size Tff7b72+ Tff7b72selfTff7b72.Td2a8ffdelta_yTb4b4b4)
Te6edf3tileTff7b72.Td2a8ffmap_source Tff7b72= Te6edf3map_source
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffloadingTa5d6ff"
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_pauseTb4b4b4:
Te6edf3map_sourceTff7b72.Td2a8fffill_tileTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTff7b72.Td2a8ffg_colorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_tilesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72def Td2a8ffmove_tiles_to_backgroundTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# remove all the tiles of the main map to the background map
T8b949e# retain only the one who are on the current zoom level
T8b949e# for all the tile in the background, stop the download if not yet started.
Te6edf3zoom Tff7b72= Tff7b72selfTff7b72.Td2a8ff_zoom
Te6edf3tiles Tff7b72= Tff7b72selfTff7b72.Td2a8ff_tiles
Te6edf3btiles Tff7b72= Tff7b72selfTff7b72.Td2a8ff_tiles_bg
Te6edf3canvas_map Tff7b72= Tff7b72selfTff7b72.Td2a8ffcanvas_map
Te6edf3tile_size Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8fftile_size
T8b949e# move all tiles to background
Tff7b72while Te6edf3tilesTb4b4b4:
Te6edf3tile Tff7b72= Te6edf3tilesTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffloadingTa5d6ff"Tb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72continue
Te6edf3btilesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3tileTb4b4b4)
T8b949e# clear the canvas
Te6edf3canvas_mapTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Te6edf3canvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_tilemap Tff7b72= Tb4b4b4{Tb4b4b4}
T8b949e# unsure if it's really needed, i personnally didn't get issues right now
T8b949e# btiles.sort(key=lambda z: -z.zoom)
T8b949e# add all the btiles into the back canvas.
T8b949e# except for the tiles that are owned by the current zoom level
Tff7b72for Te6edf3tile Tff7b72in Te6edf3btilesTb4b4b4[Tb4b4b4:Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffzoom Tff7b72== Te6edf3zoomTb4b4b4:
Te6edf3btilesTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3tileTb4b4b4)
Te6edf3tilesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3tileTb4b4b4)
Te6edf3tileTff7b72.Td2a8ffsize Tff7b72= Te6edf3tile_sizeTb4b4b4, Te6edf3tile_size
Te6edf3canvas_mapTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTff7b72.Td2a8ffg_colorTb4b4b4)
Te6edf3canvas_mapTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftile_map_setTb4b4b4(Te6edf3tileTff7b72.Td2a8fftile_xTb4b4b4, Te6edf3tileTff7b72.Td2a8fftile_yTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72continue
Te6edf3canvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTff7b72.Td2a8ffg_colorTb4b4b4)
Te6edf3canvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffaddTb4b4b4(Te6edf3tileTb4b4b4)
Tff7b72def Td2a8ffremove_all_tilesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# clear the map of all tiles.
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcanvas_mapTff7b72.Td2a8ffbeforeTff7b72.Td2a8ffclearTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3tile Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tilesTb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72del Tff7b72selfTff7b72.Td2a8ff_tilesTb4b4b4[Tb4b4b4:Tb4b4b4]
Tff7b72del Tff7b72selfTff7b72.Td2a8ff_tiles_bgTb4b4b4[Tb4b4b4:Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ff_tilemap Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72def Td2a8fftile_map_setTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Te6edf3tile_y Tff7b72* Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_col_countTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4) Tff7b72+ Te6edf3tile_x
Tff7b72if Te6edf3valueTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_tilemapTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Te6edf3value
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_tilemapTff7b72.Td2a8ffpopTb4b4b4(Te6edf3keyTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8fftile_in_tile_mapTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4)Tb4b4b4:
Te6edf3key Tff7b72= Te6edf3tile_y Tff7b72* Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffget_col_countTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_zoomTb4b4b4) Tff7b72+ Te6edf3tile_x
Tff7b72return Te6edf3key Tff7b72in Tff7b72selfTff7b72.Td2a8ff_tilemap
Tff7b72def Td2a8ffon_sizeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3layer Tff7b72in Tff7b72selfTff7b72.Td2a8ff_layersTb4b4b4:
Te6edf3layerTff7b72.Td2a8ffsize Tff7b72= Te6edf3size
Tff7b72selfTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8fflonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffon_posTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3posTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8fflonTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffon_map_sourceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3sourceTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3string_typesTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_source Tff7b72= Te6edf3MapSourceTff7b72.Td2a8fffrom_providerTb4b4b4(Te6edf3sourceTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3sourceTb4b4b4, Tb4b4b4(Tffa657tupleTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3cache_keyTb4b4b4, Te6edf3min_zoomTb4b4b4, Te6edf3max_zoomTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3attributionTb4b4b4, Te6edf3options Tff7b72= Te6edf3source
Tff7b72selfTff7b72.Td2a8ffmap_source Tff7b72= Te6edf3MapSourceTb4b4b4(
Te6edf3urlTff7b72=Te6edf3urlTb4b4b4,
Te6edf3cache_keyTff7b72=Te6edf3cache_keyTb4b4b4,
Te6edf3min_zoomTff7b72=Te6edf3min_zoomTb4b4b4,
Te6edf3max_zoomTff7b72=Te6edf3max_zoomTb4b4b4,
Te6edf3attributionTff7b72=Te6edf3attributionTb4b4b4,
Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4,
Tff7b72*Tff7b72*Te6edf3options
Tb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3sourceTb4b4b4, Te6edf3MapSourceTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_source Tff7b72= Te6edf3source
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ExceptionTb4b4b4(Ta5d6ff"Ta5d6ffInvalid map source providerTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffzoom Tff7b72= Te6edf3clampTb4b4b4(Tff7b72selfTff7b72.Td2a8ffzoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmin_zoomTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmax_zoomTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffremove_all_tilesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────